/**
 * AuthTag.java Create on 2012-1-17上午11:03:27 Copyright (c) 2012 by e_trans.
 */
package com.etrans.web.gps.common.auth;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.etrans.web.gps.business.system.domain.PermissionMenu;
import com.etrans.web.gps.business.system.domain.SysUser;
import com.etrans.web.gps.common.Constant;
 

/**
 * 
 * <p>Title: AuthTag.java<／p>
 * <p>Description: 权限验证控制标签<／p>
 * <p>Copyright: Copyright (c) 2007<／p>
 * <p>Company: E-trans<／p>
 * 
 * @author R.Lao
 * @date 2017年6月15日
 * @time 下午8:13:01
 * @version 1.0
 */
public class AuthTag extends BodyTagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8440359263487059548L;

	/**
	 * 权限值
	 */
	private String operation;

	/**
	 * @return the operation
	 */
	public String getOperation() {
		return operation;
	}

	/**
	 * @param operation the operation to set
	 */
	public void setOperation(String operation) {
		this.operation = operation;
	}

	/**
	 * doStartTag()方法是遇到标签开始时会呼叫的方法，
	 * 其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,
	 * 前者表示将显示标签间的文字，后者表示不显示标签间的文字；
	 
	 */
	public int doStartTag() throws JspException {
		try {
			boolean tage = false;
			HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
			SysUser userInfo = (SysUser)request.getSession().getAttribute(Constant.LOGIN_SESSION_NAME);//取得登录用户信息			
			if(userInfo==null){
				return SKIP_BODY;
			}
			/** 超级用户的话 拥有所有权限 **/
			if(userInfo.isSuper_admin()){
				return EVAL_BODY_INCLUDE;
			}
			PermissionMenu pMenu = (PermissionMenu)request.getSession().getAttribute(Constant.USER_OP_MENU);//取得登录用户信息
			if(null == pMenu)
			 return SKIP_BODY;
			List<String>  userHasAuthorityList = pMenu.getOperate();
			if(userHasAuthorityList.contains(operation)){
				tage = true;
			}  
		 	return   tage?EVAL_BODY_INCLUDE:SKIP_BODY;
		} catch (Exception e) {
			return SKIP_BODY;
		}
	}

	/**
	 *  doEndTag()方法是在遇到标签结束时呼叫的方法，
	 * 其合法的返回值是EVAL_PAGE与 SKIP_PAGE，
	 * 前者表示处理完标签后继续执行以下的JSP网页，
	 * 后者是表示不处理接下来的JSP网页
	 */
	public int doEndTag() throws JspException {
		try {
			if (bodyContent != null) {
				bodyContent.writeOut(bodyContent.getEnclosingWriter());
			}
		} catch (IOException ex) {
			throw new JspTagException("IO Error:" + ex.getMessage());
		}
		return EVAL_PAGE;
	}

	/**
	 * 这个方法是在显示完标签间文字之后呼叫的，
	 * 其返回值有EVAL_BODY_AGAIN与SKIP_BODY，
	 * 前者会再显示一次标签间的文字，
	 * 后者则继续执行标签处理的下一步
	 */
	public int doAfterBody() throws JspException {
		return SKIP_BODY;
	}

	public void setBodyContent(BodyContent bodyContent) {
		this.bodyContent = bodyContent;
	}

}
